//游戏主逻辑文件

//定义一个JavaScript数组
var board=new Array();
//
var hasConflicted=new Array();
//游戏得分
var score=0;

//初始化棋盘格 函数自调用
$(function () {
    //初始化棋盘格和数字格
    newgame();
});

function newgame(){
    //初始化棋盘格
    init();
    //在随机两个格子生成数字
    generateOneNumber();
    generateOneNumber();
}

function init(){
    //i表示4x4中格子的行
    for(var i=0;i<4;i++){
        //定义一个二维数组
        board[i]=new Array();
        hasConflicted[i]=new Array();
        //j表示4x4格子中的列
        for(var j=0;j<4;j++){
            //初始化小格子的值为0
            board[i][j]=0;
            hasConflicted[i][j]=false;
            //通过双重遍历获取每个格子元素
            var gridCell=$("#grid-cell-"+i+"-"+j);
            //通过getPostTop()方法设置每个格子距顶端的距离
            gridCell.css("top",getPostTop(i,j));
            //通过getPostLeft()方法设置每个格子距左端的距离
            gridCell.css("left",getPostLeft(i,j));
        }
    }
    //初始化数字格
    updateBoardView();
    //分数置0
    score=0;
    $("#score").text(score);
}

function updateBoardView(){
    //首先清空之前的数字格布局内容
    $(".number-cell").remove();
    for (var i=0;i<4;i++){
        for (var j=0;j<4;j++){
            //向棋盘格上增加数字格
            $("#grid-container").append("<div class='number-cell' id='number-cell-"+i+"-"+j+"'></div>");
            var numberCell=$("#number-cell-"+i+"-"+j);
            //如果棋盘格的值为0的话，设置数字格宽高都为0
            if(board[i][j]==0){
                numberCell.css("width","0px");
                numberCell.css("height","0px");
                numberCell.css("top",getPostTop(i,j)+100);
                numberCell.css("left",getPostLeft(i,j)+100);
            }
            //如果棋盘格的值不为0的话，设置数字格高宽为75并设置背景色和前景及数字值
            else{
                numberCell.css("width","100px");
                numberCell.css("height","100px")
                numberCell.css("top",getPostTop(i,j));
                numberCell.css("left",getPostLeft(i,j));
                numberCell.css("background-color",getNumberBackgroundColor(board[i][j]));
                numberCell.css("color",getNumberColor(board[i][j]));
                numberCell.text(board[i][j]);
            }
            hasConflicted[i][j]=false;
        }
    }
    //设置数字值的字体样式
    $(".number-cell").css("line-height","100px");
    $(".number-cell").css("font-size","60px");
}

//生成一个随机位置的随机数
function generateOneNumber(){
    //生成一个随机的位置
    var randx=parseInt(Math.floor(Math.random()*4));
    var randy=parseInt(Math.floor(Math.random()*4));
    //定义一个死循环，完成生成随机空格子
    while(true){
        //如果当前格子的值为0，满足条件
        if(board[randx][randy]==0){
            break;
        }
        //否则重新随机生成一个位置
        var randx=parseInt(Math.floor(Math.random()*4));
        var randy=parseInt(Math.floor(Math.random()*4));
    }
    //生成一个随机的数字
    var randNumber=getrandNumber();
    //在随机生成的位置上显示出随机生成的数字
    board[randx][randy]=randNumber;
    //实现随机数字显示的动画
    ShowNumberWithAnimation(randx,randy,randNumber);
}

function getrandNumber(){
    num=Math.random();
    if(num<0.4){
        return 2;
    }else if(num<0.6){
        return 4;
    }else if(num<0.8){
        return 8;
    }else{
        return 16;
    }
}

//再来一局函数
function restartgame(){
    $("#gameover").remove();
    updateScore(0);
    newgame();
}

